const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const fetch = require('node-fetch');
const config = require('../config');

/**
 * 统一登录认证接口
 * POST /api/auth/login
 * 
 * 流程：
 * 1. 接收统一登录中心返回的access_token
 * 2. 调用统一登录中心API验证token
 * 3. 验证成功后生成应用自己的JWT token
 * 4. 返回用户信息和JWT token
 */
router.post('/login', async (req, res) => {
  console.log('[Login] 收到登录请求');
  
  // 从Authorization header获取access_token
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    console.log('[Login] 缺少access_token');
    return res.status(400).json({ 
      code: 400,
      message: '缺少access_token' 
    });
  }

  const accessToken = authHeader.split(' ')[1];
  console.log('[Login] access_token:', accessToken.substring(0, 20) + '...');

  try {
    // 调用统一登录中心API验证token
    const verifyURL = `${config.unifiedLogin.apiUrl}?access_token=${accessToken}&app_name=${config.unifiedLogin.appName}`;
    console.log('[Login] 验证URL:', verifyURL);
    
    const response = await fetch(verifyURL);
    const data = await response.json();
    console.log('[Login] 统一登录中心响应:', data);

    // 检查验证结果
    if (data.code !== 200) {
      console.log('[Login] access_token验证失败');
      return res.status(401).json({ 
        code: 401,
        message: 'access_token无效' 
      });
    }

    // 提取用户信息
    const { name, no, sign } = data;
    console.log('[Login] 用户信息 - 姓名:', name, '工号:', no);

    // 构建用户信息对象
    const userInfo = {
      username: name,
      userId: no,
      sign: sign
    };

    // 生成应用自己的JWT token
    const jwtToken = jwt.sign(userInfo, config.jwtSecret, { 
      expiresIn: '7d' // token有效期7天
    });

    console.log('[Login] 登录成功，生成JWT token');

    // 返回认证结果
    res.json({
      code: 200,
      message: '登录成功',
      data: {
        token: jwtToken,
        userInfo,
        sign
      }
    });

  } catch (err) {
    console.error('[Login] 认证请求失败:', err);
    return res.status(500).json({ 
      code: 500,
      message: '认证失败，请稍后再试' 
    });
  }
});

/**
 * 获取当前用户信息
 * GET /api/auth/userinfo
 * 需要JWT认证
 */
router.get('/userinfo', require('../middleware/auth'), (req, res) => {
  res.json({
    code: 200,
    message: '获取成功',
    data: req.user
  });
});

/**
 * 登出接口
 * POST /api/auth/logout
 */
router.post('/logout', (req, res) => {
  console.log('[Logout] 用户登出');
  res.json({
    code: 200,
    message: '登出成功'
  });
});

module.exports = router;

